import java.util.Random;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for (double x : arr) {//遍历数组
            System.out.println(x);
        }
    }
    public static void hanNuo(int n,char p1,char p2,char p3){//有n个需要从p1借助p2移动到p3
        if (n == 1) {
            move(p1,p3);
            return;
        }else {
            hanNuo(n-1,p1,p3,p2);//p1上的n-1个盘借助p3移到p2
            move(p1,p3);//然后再把剩下的那一个移到p3
            hanNuo(n-1,p2,p1,p3);//再把之前p1借p3移到p2的n-1个盘,借助p1移到p3,然后完
        }
    }
    public static void move(char p1,char p2) {
        System.out.print(p1 + " -> " + p2 + "  ");
    }
    public static void main26(String[] args) {//递归求解汉诺塔问题
        hanNuo(3,'A','B','C');
    }
    public static int fiBo(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }else {
            return fiBo(n-1) + fiBo(n-2);
        }
    }
    public static void main25(String[] args) {//递归求斐波那契数列的第 N 项
        System.out.println(fiBo(7));
    }
    //写一个递归方法，输入一个非负整数，返回组成它的数字之和
    public static int printSum(int n) {
        if (n < 10) {
            return n;
        }else {
            return printSum(n/10) + n % 10;
        }
    }
    public static void main24(String[] args) {
        System.out.println(printSum(1234));
    }
    /*
    按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)    （递归）
     */
    public static void print(int n) {
        if (n < 10) {
            System.out.print(n+" ");
            return;
        }else {
            print(n/10);
            System.out.print(n%10+" ");
        }
    }
    public static void main23(String[] args) {
        print(1234);
    }
    public static int add(int n) {
        if (n == 1) {
            return 1;
        }else {
            return add(n-1) + n;
        }
    }
    public static void main22(String[] args) {//递归求 1 + 2 + 3 + ... + 10
        System.out.println(add(10));
    }
    public static int diGui(int n) {
        if (n == 1) {
            return 1;
        }else {
            return diGui(n-1) * n;
        }
    }
    public static void main21(String[] args) {//递归求 N 的阶乘
        System.out.println(diGui(5));

    }
    public static void main20(String[] args) {//猜数字游戏
        Random random = new Random();
        int num = random.nextInt(100);//[0,100)

        Scanner scanner = new Scanner(System.in);
        int cont = 10;//剩下的次数
        while (true) {
            if (cont <= 0) {
                System.out.println("次数为0,游戏结束");
                return;
            }
            System.out.println("<猜数字> 请输入:");
            int input = scanner.nextInt();
            if (input > num) {
                cont--;
                System.out.println("大了 剩余次数:" + cont);
            }else if (input < num) {
                cont--;
                System.out.println("小了 剩余次数:" + cont);
            }else {
                System.out.println("猜对了!");
                return;
            }
        }

    }
    /*
    获取一个数二进制序列中所有的偶数位和奇数位，分别输出二进制序列
     */
    public static void main19(String[] args) {
        int n = 11;
        for (int i = 31; i >= 0 ; i-=2) {//偏移量,最多为31,最左边偶数位应向右偏移31位
            if ( ((n>>i) & 1) == 1) {
                System.out.print("1 ");
            }else {
                System.out.print("0 ");
            }
        }
        System.out.println();
        for (int i = 30; i >= 0 ; i-=2) {//最左边偶数位应向右偏移30位
            if ( ((n>>i) & 1) == 1) {
                System.out.print("1 ");
            }else {
                System.out.print("0 ");
            }
        }
    }
    public static void main18(String[] args) {//写一个函数返回参数二进制中 1 的个数
        int n = 11;
        int cont = 0;
        while(n != 0) {
            n &= (n-1);
            cont++;
        }
        System.out.println(cont);
    }
    /*
    求出0～999之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数
本身，如： 153＝1^3＋5^3＋3^3 ，则153是一个“水仙花数”。)
     */
    public static void main17(String[] args) {
        for (int i = 0; i <= 999 ; i++) {
            int cmp = i;
            int sum = 0;
            while(cmp != 0) {
                sum += Math.pow(cmp % 10,3);
                cmp /= 10;
            }
            if (i >= 100 && i == sum) {
                System.out.println(i);
            }
        }
    }
    public static void main16(String[] args) {//求两个正整数的最大公约数
        int a = 75;//辗转相除法
        int b = 50;
        int c = a % b;
        while(c != 0) {
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println(b);
    }
    public static void main15(String[] args) {//输出乘法口诀表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i ; j++) {
                System.out.print( i + "*" + j + "=" + (i*j) + " ");
            }
            System.out.println();
        }
    }
    /*
    根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
     */
    public static void main14(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextInt()) {
            int input = scanner.nextInt();
            if (input <= 18) {
                System.out.println("少年");
            }else if (input >= 19 && input <= 28) {
                System.out.println("青年");
            }else if (input >= 29 && input <= 55) {
                System.out.println("中年");
            }else {
                System.out.println("老年");
            }
        }

    }
    /*
    在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
     */
    public static int max(int x,int y) {
        return x > y ? x : y;
    }
    public static double max(double x,double y,double z) {
        double a = x > y ? x : y;
        return a > z ? a : z;
    }
    public static void main13(String[] args) {
        System.out.println(max(3,2));
        System.out.println(max(3.1,3.3,3.0));
    }
    /*
    重载方法
    在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
     */
    public static int add(int x,int y) {
        return x + y;
    }
    public  static  double add(double x,double y,double z) {
        return x + y + z;
    }
    public static void main12(String[] args) {
        System.out.println(add(1,2));
        System.out.println(add(3.0,0.15,0.15));
    }
    public static void main11(String[] args) {//求斐波那契数列的第n项。(迭代实现)
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        int key = 0;//答案
        int cont_a = 1;//前两项的值
        int cont_b = 1;//前一项的值
        if(input <= 2) {
            System.out.println(1);
            return;
        }else {
            for (int i = 3; i <= input; i++) {
                key = cont_a +cont_b;
                cont_a = cont_b;
                cont_b = key;
            }
            System.out.println(key);
        }

    }
    /*
    创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
    要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
     */
    public static int max2(int x,int y) {
        return x > y ? x : y;
    }
    public static int max3(int x,int y,int z) {
        int a = max2(x,y);
        return a > z ? a : z;
    }
    public static void main10(String[] args) {
        System.out.println(max3(1,8,2));
    }
    /*
    编写代码模拟三次密码输入的场景。 最多能输入三次密码，
    密码正确，提示“登录成功”,密码错误，
    可以重新输 入，最多输入三次。三次均错，则提示退出程序
     */
    public static void main9(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int cont = 3;//输入密码的次数
        while(scanner.hasNextLine()) {
            String input = scanner.nextLine();
            if ( "123456".equals(input) ) {
                System.out.println("登录成功");
                return;
            }else {
                cont--;
                System.out.println("密码错误,还可输入:"+ cont +"次");
            }
            if (cont == 0) {
                System.out.println("次数为0,程序退出");
                return;
            }
        }
    }
    public static void main8(String[] args) {//输出一个整数的每一位，如：123的每一位是3，2，1
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        while (num != 0) {
            System.out.print(num % 10 + " ");
            num /= 10;
        }
    }
    public static void main7(String[] args) {//计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
        double fuHao = 1;//符号位
        double sum = 0;
        for (double i = 1; i <= 100; i++) {
            sum += fuHao * 1.0 / i;
            fuHao *= -1;
        }
        System.out.println(sum);
    }
    public static void main6(String[] args) {//多组输入,输入n(表示行数),打印x行图
        Scanner input = new Scanner(System.in);
        while (input.hasNextInt()) { // 注意 while 处理多个 case
            int n = input.nextInt();
            for (int i = 0; i < n; i++) {//模拟一个二维数组
                for (int j = 0; j < n; j++) {
                    if (i == j || i + j == n-1) {//对角线 和 两位置和等于n-1的地方需要*
                        System.out.print("*");
                    }else {
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
    public static void main5(String[] args) {//找到1-100直接能被3又能被5整除(使用break或continue)
        int num = 1;
        while(num <= 100) {
            if(num % 3 == 0 && num % 5 == 0) {
                System.out.println(num);
                num++;
            } else {
                num++;
                continue;
            }
        }
    }
    public static void main4(String[] args) {//编写程序数一下 1到 100 的所有整数中出现多少个数字9
        int sum = 0;//记录出现过的9
        for(int num = 1 ; num <= 100 ; num++) {
            int numCont = num;
            while(numCont >= 9) {
                if(numCont % 10 == 9) {
                    sum++;
                }
                numCont /= 10;
            }
        }
        System.out.println(sum);
    }
    public static void main3(String[] args) {//输出 1000 - 2000 之间所有的闰年
        for(int year = 1000 ; year <= 2000 ; year += 4) {
            if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                System.out.println(year);
            }
        }
    }
    public static void main2(String[] args) {//打印1-100之间所有的素数
        int i = 0;
        boolean num = true;//是不是素数
        for(i = 1 ; i <= 100 ; i++) {
            num = true;
            for(int j = 2 ; j < i/2 ; j++)
            {
                if(i % j == 0) {
                    num = false;
                    break;
                }
            }
            if(num) {
                System.out.println(i);
            }
        }

    }
    public static void main1(String[] args) {//给定一个数字，判定一个数字是否是素数
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        for(int i = 2 ; i < input/2 ; i++)
        {
            if(input % i == 0) {
                System.out.println(input + "不是素数");
                return;
            }
        }
        System.out.println(input + "是素数");
    }
}